/**
 * 版权所有 2009-2015 中国中医科学院中医药信息研究所 何前锋 frontpeak@yahoo.com.cn
 **/
package cn.ac.cintcm.sh.service;

import java.util.Collection;
import java.util.List;

import cn.ac.cintcm.sh.dao.ArticleDao;
import cn.ac.cintcm.sh.dao.ChapterDao;
import cn.ac.cintcm.sh.domain.Article;
import cn.ac.cintcm.sh.domain.Chapter;
import cn.ac.cintcm.sh.domain.Chapters;
import cn.ac.cintcm.sh.domain.TextArea;

/**
 * 原文的搜索，定位等服务
 * @author 何前锋 Franklin He(franklinheqf@gmail.com)
 *
 */
public class TextService {

    
    private ChapterDao chapterDao;
    private ArticleDao articleDao;
    
    public TextService() {
        chapterDao = new ChapterDao();
        articleDao = new ArticleDao();
    }

    /**
     * 获取原文的章节索引
     * @return 原文的章节，包括名称和id信息
     */
    public List<Chapter> getChaptersIndex() {
        List<Chapter> chapters = chapterDao.getChapters();
        return chapters;
    }
    
    /**
     * 获取某一章节的原文
     * @param chapterId 章节名称，使用阿拉伯数字编号的id
     * @return 该章节的原文内容，以及是否具有上下一章内容的信息
     */
    public TextArea getChapter(String chapterId) {
        int id = 1;
        if (chapterId != null) {
            id = Integer.parseInt(chapterId);
        }
        TextArea ta = new TextArea(id);
        List<Article> articles = articleDao.getArticles(id);
        ta.setArticles(articles);
        ta.setHasNext(chapterDao.isFinalChapter(id));
        ta.setHasPrevious(chapterDao.isFirstChapter(id));
        return ta;
    }
    
    /**
     * 根据模糊字符串获取包含字符串的所有章节信息
     * @param name 需要匹配的字符串
     * @return 包含匹配字符串的原文所在的章节
     */
    public Chapters getArticles(String name) {
        Chapters chapters = null;
        
        if (name != null) {
            name = name.trim();
            if (!name.equals("")) {
                chapters = articleDao.getArticles(name);
                Collection<Article> articles = chapters.getArticles();
                highlight(articles, name);
            }
        }
        return chapters;
    }
    
    /**
     * 获取与某方剂相关的所有原文条文
     * @param prescriptionId 方剂的编号
     * @return 该方剂所涉及的条文
     */
    public List<Article> getPresArticles(String prescriptionId) {
        int id = 1;
        if (prescriptionId != null) {
            id = Integer.parseInt(prescriptionId);
        }
        List<Article> articles = articleDao.getPresArticles(id);
        
        return articles;
    }
    
    /**
     * 获取与某中药相关的所有原文条文
     * @param herbId 中药的编号
     * @return 该中药所涉及的条文
     */
    public List<Article> getHerbArticles(String herbId) {
        int id = 1;
        if (herbId != null) {
            id = Integer.parseInt(herbId);
        }
        List<Article> articles = articleDao.getHerbArticles(id);
         
        return articles;
    }    
    
    /**
     * 根据章节号获取该章节的所有条文
     * @param chapterNo 章节编号
     * @return
     */
    public List<Article> getChapters(String[] chapterNo) {
        List<Article> articles = null;
        if (chapterNo != null) {
            int[] ids = new int[chapterNo.length];
            int i = 0;
            for (String s : chapterNo) {
                ids[i++] = Integer.parseInt(s);
            }
            articles = articleDao.getArticles(ids);
            
            
        }
        return articles;

    }

    private void highlight(Collection<Article> articles, String name) {
        if (articles != null) {
            for (Article a : articles) {
                String sb = a.getText();
                String s = sb.replaceAll(name, "<font color=\"red\">" + name + "</font>");
                a.setText(s);
            }
        }
    }

}